Проверка статуса репликации

Проверка статуса репликации утилитой dsconf

Чтобы получить детальную информацию по соглашениям о репликации текущего сервера, нужно выполнить следующую команду:

sudo dsconf -j ALD-COMPANY-LAN replication status --suffix dc=ald,dc=company,dc=lan

Информация будет предоставлена в json-формате:

{
    "type": "list", "items": [{
        "agmt-name": ["meTodc-2.ald.company.lan"],
        "replica": ["dc-2.ald.company.lan:389"],
        "replica-enabled": ["on"],
        "update-in-progress": ["FALSE"],
        "last-update-start": ["20230824143651Z"],
        "last-update-end": ["20230824143651Z"],
        "number-changes-sent": ["4:25/723 5:1/0 "],
        "number-changes-skipped": ["unavailable"],
        "last-update-status": ["Error (0) Replica acquired successfully: Incremental update succeeded"],
        "last-init-start": ["20230824120948Z"],
        "last-init-end": ["20230824120954Z"],
        "last-init-status": ["Error (0) Total update succeeded"],
        "reap-active": ["0"],
        "replication-status": ["Not in Synchronization: supplier (64e76843000000040000) consumer (Unavailable) State (green) Reason (error (0) replica acquired successfully: incremental update succeeded)"],
        "replication-lag-time": ["unavailable"]
    }]
}

Полученную информацию можно представить в формате таблицы, но потребуется установить пакет jq и использовать комплексную команду форматирования, которую можно сохранить в виде скрипта:

sudo apt install jq -y

(printf 'SUFFIX \tAGREEMENT \tSTATE \tTIME-SINCE \tLDAP-STATUS \tREPL-STATUS \n'; sudo dsconf -j ALD-COMPANY-LAN replication list | jq '.items[]' -r | xargs -P8 -i -- sudo dsconf -j ALD-COMPANY-LAN repl-agmt list --suffix={} | jq '.items[].attrs | (.nsds5replicalastupdatestatusjson[0] | fromjson) as $status | [.nsds5replicaroot[0], .cn[0], $status.state, $status.date, $status.ldap_rc_text, $status.repl_rc_text] | @tsv' -r | sort ) | column -s$'\t' -t

Результат выполнения команды см. на Состояние соглашений о репликации в табличном виде.

../../../_images/13_replication-agreements-table1.png

Рисунок 79 Состояние соглашений о репликации в табличном виде

Также, присутствует возможность с помощью команды replication monitor утилиты dsconf собрать информацию сразу со всех контроллеров домена, но в состоянии репликации не будет указан агрегированный статус, что затруднит анализ:

sudo dsconf ldap://localhost:389 replication monitor

Для каждого сервера в домене нужно следует ввести учетные данные пользователя cn=Directory Manager:

Enter Bind DN: cn=Directory Manager
Enter password for cn=Directory Manager on ldap://localhost:389: *****

Enter a bind DN for dc-2.ald.company.lan:389: cn=Directory Manager
Enter a password for cn=Directory Manager on dc-2.ald.company.lan:389: *****

Чтобы не вводить учетные данные каждый раз вручную, на рабочей станции администратора их можно определить в текстовом файле ~/.dsrc:

[repl-monitor-connections]
connection1 = dc-1.ald.company.lan:389:cn=Directory Manager:*
connection2 = dc-2.ald.company.lan:389:cn=Directory Manager:[~/pwd.txt]
connection3 = dc-3.ald.company.lan:389:cn=Directory Manager:S3cret

Где:

  • для dc-1 будет запрошен пароль;

  • для dc-2 пароль будет взят из файла pwd.txt;

  • для dc-3 в качестве пароля будет использована строка S2cret.

Проверка репликации с помощью скриптов checkipaconsistency

Внимание

В данном разделе представлена информация о том, как можно проверить целостность домена с использованием модуля checkipaconsistency из публичного pip-репозитория, установка которого в продуктивных средах без дополнительной проверки скриптов категорически запрещается.

Рекомендуется сначала проверить текущую версию Python, по умолчанию устанавливается 3.7.3:

sudo python3 -V
Python 3.7.3

Следует скачать установочный файл системы управления пакетами pip соответствующей версии:

wget https://bootstrap.pypa.io/pip/3.7/get-pip.py

--2024-11-25 10:44:34--  https://bootstrap.pypa.io/pip/3.7/get-pip.py
Распознаётся bootstrap.pypa.io (bootstrap.pypa.io)… 151.101.84.175, 2a04:4e42:14::175
Подключение к bootstrap.pypa.io (bootstrap.pypa.io)|151.101.84.175|:443... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа… 200 OK
Длина: 2636033 (2,5M) [text/x-python]
Сохранение в: «get-pip.py»

get-pip.py                                     100%[================================================================>]   2,51M  5,32MB/s    за 0,5s

2024-11-25 10:44:35 (5,32 MB/s) - «get-pip.py» сохранён [2636033/2636033]

Далее устанавливается pip:

sudo python3 ./get-pip.py

Collecting pip<24.1
Downloading pip-24.0-py3-none-any.whl.metadata (3.6 kB)
Collecting wheel
Downloading wheel-0.42.0-py3-none-any.whl.metadata (2.2 kB)
Downloading pip-24.0-py3-none-any.whl (2.1 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 4.4 MB/s eta 0:00:00
Downloading wheel-0.42.0-py3-none-any.whl (65 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 65.4/65.4 kB 1.3 MB/s eta 0:00:00
DEPRECATION: python-apt 1.8.4.3-ci202309111239-astra1-b1 has a non-standard version number. pip 24.1 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of python-apt or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063
Installing collected packages: wheel, pip
Successfully installed pip-24.0 wheel-0.42.0
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

Затем модуль checkipaconsistency:

sudo python3 -m pip install checkipaconsistency

Collecting checkipaconsistency
Downloading checkipaconsistency-2.7.10-py2.py3-none-any.whl.metadata (9.6 kB)
Collecting pplogger (from checkipaconsistency)
Downloading pplogger-4.2.0-py2.py3-none-any.whl.metadata (1.4 kB)
Requirement already satisfied: python-ldap in /usr/lib/python3/dist-packages (from checkipaconsistency) (3.1.0)
Collecting prettytable (from checkipaconsistency)
Downloading prettytable-3.7.0-py3-none-any.whl.metadata (26 kB)
Requirement already satisfied: dnspython in /usr/lib/python3/dist-packages (from checkipaconsistency) (1.16.0)
Collecting importlib-metadata (from prettytable→checkipaconsistency)
Downloading importlib_metadata-6.7.0-py3-none-any.whl.metadata (4.9 kB)
Collecting wcwidth (from prettytable→checkipaconsistency)
Downloading wcwidth-0.2.13-py2.py3-none-any.whl.metadata (14 kB)
Collecting zipp>=0.5 (from importlib-metadata→prettytable→checkipaconsistency)
Downloading zipp-3.15.0-py3-none-any.whl.metadata (3.7 kB)
Collecting typing-extensions>=3.6.4 (from importlib-metadata→prettytable→checkipaconsistency)
Downloading typing_extensions-4.7.1-py3-none-any.whl.metadata (3.1 kB)
Downloading checkipaconsistency-2.7.10-py2.py3-none-any.whl (24 kB)
Downloading pplogger-4.2.0-py2.py3-none-any.whl (14 kB)
Downloading prettytable-3.7.0-py3-none-any.whl (27 kB)
Downloading importlib_metadata-6.7.0-py3-none-any.whl (22 kB)
Downloading wcwidth-0.2.13-py2.py3-none-any.whl (34 kB)
Downloading typing_extensions-4.7.1-py3-none-any.whl (33 kB)
Downloading zipp-3.15.0-py3-none-any.whl (6.8 kB)
DEPRECATION: python-apt 1.8.4.3-ci202309111239-astra1-b1 has a non-standard version number. pip 24.1 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of python-apt or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063
Installing collected packages: wcwidth, pplogger, zipp, typing-extensions, importlib-metadata, prettytable, checkipaconsistency
Successfully installed checkipaconsistency-2.7.10 importlib-metadata-6.7.0 pplogger-4.2.0 prettytable-3.7.0 typing-extensions-4.7.1 wcwidth-0.2.13 zipp-3.15.0
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

При установке модуля в системе будет создан скрипт /usr/local/bin/cipa, который позволит запускать утилиту в одну строку. Учитывая, что пароль нужно передавать утилите открытым текстом, важно не забыть поставить дополнительный пробел перед именем утилиты cipa или отключить ведение истории:

set +o history
cipa -d ald.company.lan -W 'AstraLinux_176'

+--------------------+---------+---------+-------+
| FreeIPA servers:   | dc-1    | dc-2    | STATE |
+--------------------+---------+---------+-------+
| Active Users       | 1       | 1       | OK    |
| Stage Users        | 0       | 0       | OK    |
| Preserved Users    | 0       | 0       | OK    |
| Hosts              | 2       | 2       | OK    |
| Services           | 10      | 10      | OK    |
| User Groups        | 6       | 6       | OK    |
| Host Groups        | 1       | 1       | OK    |
| Netgroups          | 0       | 0       | OK    |
| HBAC Rules         | 2       | 2       | OK    |
| SUDO Rules         | 0       | 0       | OK    |
| DNS Zones          | 2       | 2       | OK    |
| Certificates       | 0       | 0       | OK    |
| LDAP Conflicts     | 0       | 0       | OK    |
| Ghost Replicas     | 0       | 0       | OK    |
| Anonymous BIND     | ROOTDSE | ROOTDSE | OK    |
| Microsoft ADTrust  | True    | True    | OK    |
| Replication Status | dc-2 0  | dc-1 0  | OK    |
+--------------------+---------+---------+-------+